KotlinのParcelableを使ってみた
はじめに
Kotlin1.1.4で追加されたParcelable Supportを使ってみました。
用途としては、画面回転時にActivityが破棄されてしまうので、BundleにParcelableを突っ込んで、復元処理をしたりすると思います。
Kotlinでは、この辺をいい感じにしてくれるParcelableSupportがあるので使ってみました。
2017/12/22時点ではexperimentalです
ソースコード
app/build.gradle
android { ... androidExtensions { experimental = true } } dependencies { implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" }
Todo.kt
@SuppressLint("ParcelCreator") @Parcelize data class Todo constructor( val id: String, val body: String) : Parcelable
MainActivity.kt
class MainActivity : AppCompatActivity() { companion object { val KEY_TODO = "todo" } lateinit var todo: Todo override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) todo = if (savedInstanceState == null) { Todo("id", "body").apply { Log.d("instance", "newInstance: $this") } } else { savedInstanceState.getParcelable<Todo>(KEY_TODO).apply { Log.d("instance", "saveInstance: $this") } } } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putParcelable(KEY_TODO, todo.copy(body = "copy body")) } }
まとめ
アノテーションをつけるだけで楽ですね。experimentalでなくなる日を楽しみしてます。